package my.queue;

import my.heap.BinaryHeap;

import java.util.Comparator;

/**
 * <p>
 * PriorityQueue 优先级队列
 * </p>
 *
 * @author AJun
 * @since 2020/9/12
 */
public class PriorityQueue<E> {

    /**
     * 使用最大堆来实现优先级队列
     */
    private final BinaryHeap<E> heap;

    public PriorityQueue(Comparator<E> comparator) {
        heap = new BinaryHeap<>(comparator);
    }

    public PriorityQueue() {
        this(null);
    }

    /**
     * 返回队列大小
     */
    public int size() {
        return heap.size();
    }

    /**
     * 队列是否为空
     */
    public boolean empty() {
        return heap.isEmpty();
    }

    /**
     * 清空队列元素
     */
    public void clear() {
        heap.clear();
    }

    /**
     * 队尾入队
     */
    public void enQueue(E element) {
        heap.add(element);
    }

    /**
     * 优先级最高的元素出队
     */
    public E deQueue() {
        return heap.remove();
    }

    /**
     * 返回优先级最高的元素
     */
    public E front() {
        return heap.get();
    }

}
